Pointer Networks CopyNet and Pointer Generator

Papers

以下三篇论文都是通过copy机制,想要能够在生成阶段生成输入中的词语,这样就可以组合出更多的句式。我们想看看这个方法能否应用到对话生成中去。第一篇论文是后两篇的基础。

  1. Pointer Networks
  2. Incorporating Copying Mechanism in Sequence-to-Sequence Learning
  3. Get To The Point: Summarization with Pointer-Generator Networks

    Incorporating Copying Mechanism in Sequence-to-Sequence Learning

    Problem

    In order to solve the problem of certain segments in the input sequence are selectively replicated in the output sequence.

CopyNet

为了解决这个问题,他们提出了CopyNet。这个网路有两个机制,一个是生成模式,另一个则是拷贝模式。CopyNet的Encoder部分也是一个双向的RNN,然后用每个word对应的隐状态作为每个字的表示,同时记做M。通常的Encoder-Decoder框架在decode阶段更新decoder隐状态的时候不回使用到M,也就是Encoder生成的表示。

最关键的是如何表示输入的每一个词,这就需要M了,因为每一个token都可以得到一个表示它上下文的表示,因此这个表示可以用来计算当前这个token到底有多少概率可以被copy到目前的decode位置上。

Get To The Point: Summarization with Pointer-Generator Networks

Pointer-generator network

这篇论文主要是为了解决摘要生成,同时他也说了和CopyNet比较接近,所以可以对比看看。

主要是将attention seq2seq模型和pointer networks结合在一起,中间计算一个$p_{gen}$来表示每一步的生成概率,依据的是每一步的context vector,decode的状态以及decoder的输入。(但是如果OOV的话输入的表示是什么呢?)。

每个词的生成概率为


$P(w) = p_{gen}P_{vocab}(w) + (1 - p_{gen}) \sum_{i:w_i = w} a_i^t$

其中$a_i^t$是attention机制在输入词的权重。代表了copy某个词的概率,如果是OOV的词,则前一项完全为0,如果不是出现在输入中的词,则后一项完全为0。

## Coverage mechanism
为了解决摘要过程中重复的问题,引入了一个覆盖度的机制。在覆盖度模型中,始终维持一个coverage vector,记做$c^t$。

$c^t = \sum_{t\prime=0}^{t-1} a^{t\prime}$

刚开始的时候,这个向量是全为0,然后每次再将这个向量输入到注意力机制中去影响注意力机制的输出。(个人猜测这个其实没有起到什么作用,因为理论上这个注意力会被RNN的序列建模性质学习到,如果说是一个正则项的话,那么没有任何的惩罚,不负责任地严重怀疑存在信息冗余)。这里作者说有必要引入一个coverage loss来惩罚重复的注意力机制。

$covloss_t = \sum_{i} min(a_i^t, c_i^t)$

和机器翻译不同的是,机器翻译讲究一对一的翻译,因此是要对大于或者小于1的coverage进行惩罚。

分享到